Azure OpenAI einrichten und anbinden
Um die KI-Services in Aeneis zu nutzen, müssen Sie Azure OpenAI mit zertifikatsbasierter Entra-ID-Authentifizierung entsprechend einrichten.
Voraussetzungen
-
Azure Entra ID mit Berechtigung zum Erstellen von App-Registrierungen und Rollenzuordnung auf der Azure OpenAI-Ressource
-
Bereitgestellte Azure OpenAI-Ressourcen (Region, Deployments/Modelle, Quota)
-
OpenSSL auf dem System, auf dem Aeneis ausgeführt wird
-
Verwendung der entsprechenden Zertifikatsdateien in Entra ID und der application.yml im Aeneis-Anwendungsverzeichnis
-
Aeneis-Dienstkonto mit Lesezugriff auf die Zertifikatsdateien
App-Registrierung in Entra ID einrichten
Um KI-Services in Aeneis zu nutzen, richten Sie Ihre App-Registrierung in Entra ID entsprechend ein.
Anleitung:
-
Erstellen Sie eine neue App-Registrierung
-
Geben Sie der App-Registrierung einen Namen
-
Stellen Sie sicher, dass unter Unterstützte Kontotypen die Option Nur Konten in diesem Organisationsverzeichnis ausgewählt ist
-
Notieren Sie sich die Verzeichnis-ID (Tenant-ID) und Anwendungs-ID (Client-ID)
Zertifikatsdateien erzeugen
Für die Anbindung der OpenAI-Services erstellen Sie ein Zertifikat mit einem SSL-Tool, z. B. OpenSSL. Über ein Skript erzeugen Sie folgende notwendige Dateien.
- aoai-key.enc.pem (verschlüsselter Private Key, PKCS#8)
- aoai-cert.csr (CSR)
- aoai-cert.pem (self-signed, für Entra-Upload)
- aoai-key.pass (Passphrase, ohne Newline)
- aoai-cert.cer (Base64 aus PEM), falls das Azure-Portal CER-Dateien bevorzugt
Zertifikatsdateien über PowerShell erzeugen
Erstellen Sie in PowerShell ein Skript nach folgendem Beispiel und führen Sie es aus, um die Zertifikatsdateien zu erzeugen.
# Erzeugt verschlüsselten Private Key (PKCS#8), CSR, self-signed Cert und Passphrase-Datei.
$ErrorActionPreference = "Stop"
# --- Pfade ---
# >>> ANPASSEN: Basis-Verzeichnisse für AOAI-Assets und Passphrase-Datei.
$AoaiDir = "C:\Users\PUBLIC\aeneis\aoai"
$PassDir = "C:\Users\PUBLIC\aeneis\pass"
# >>> ANPASSEN: Dateinamen (falls gewünscht)
$KeyEnc = Join-Path $AoaiDir "aoai-key.enc.pem"
$Csr = Join-Path $AoaiDir "aoai-cert.csr"
$CertPem = Join-Path $AoaiDir "aoai-cert.pem"
$CertCer = Join-Path $AoaiDir "aoai-cert.cer" # (optional) CER aus PEM
$ExtCnf = Join-Path $AoaiDir "ext.cnf"
$PassFile = Join-Path $PassDir "aoai-key.pass"
$CreatedPaths = @()
if (-not (Get-Command openssl -ErrorAction SilentlyContinue)) {
throw "OpenSSL wurde nicht gefunden. Bitte OpenSSL installieren bzw. openssl.exe in den PATH legen."
}
New-Item -ItemType Directory -Force $AoaiDir | Out-Null
New-Item -ItemType Directory -Force $PassDir | Out-Null
# --- Passphrase abfragen ---
# >>> ANPASSEN: Mindestlänge/Policy nach Bedarf erzwingen
$sec = Read-Host "Bitte Passphrase für aoai-key.enc.pem eingeben" -AsSecureString
$bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec)
try {
$plain = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
} finally {
if ($bstr -ne [IntPtr]::Zero) { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr) }
}
if ([string]::IsNullOrWhiteSpace($plain)) { throw "Keine Passphrase eingegeben." }
# 1) Encrypted Private Key (RSA-3072, AES-256)
if (-not (Test-Path $KeyEnc)) {
# >>> ANPASSEN (optional): rsa_keygen_bits (z.B. 4096)
& openssl genpkey -algorithm RSA -aes256 -pkeyopt rsa_keygen_bits:3072 -out "$KeyEnc" -pass pass:$plain
if (Test-Path $KeyEnc) { $CreatedPaths += $KeyEnc }
}
# 2) CSR
if (-not (Test-Path $Csr)) {
# >>> ANPASSEN: DN (Firma/Standort/CN)
& openssl req -new -key "$KeyEnc" -out "$Csr" `
-subj "/C=DE/ST=Baden-Wuerttemberg/O=Intellior GmbH/CN=aeneis-aoai-client" `
-passin pass:$plain
if (Test-Path $Csr) { $CreatedPaths += $Csr }
}
# 3) Extensions-Datei
@"
[ext]
keyUsage = digitalSignature,keyEncipherment
extendedKeyUsage = clientAuth
"@ | Set-Content -Path "$ExtCnf" -Encoding ASCII
if (Test-Path $ExtCnf) { $CreatedPaths += $ExtCnf }
# 4) Self-signed Zertifikat
if (-not (Test-Path $CertPem)) {
# >>> ANPASSEN: Gültigkeitstage
& openssl x509 -req -days 365 -in "$Csr" -signkey "$KeyEnc" -out "$CertPem" -extfile "$ExtCnf" -extensions ext -passin pass:$plain
if (Test-Path $CertPem) { $CreatedPaths += $CertPem }
}
# 4a) CER aus PEM erzeugen – für Entra-Upload
if ((Test-Path $CertPem) -and -not (Test-Path $CertCer)) {
& openssl x509 -in "$CertPem" -outform PEM -out "$CertCer"
if (Test-Path $CertCer) { $CreatedPaths += $CertCer }
# Alternative (DER-Format):
# & openssl x509 -in "$CertPem" -outform DER -out "$CertCer"
}
# 5) Passphrase-Datei
# >>> HINWEIS: Enthält Klartext-Passphrase – NTFS-ACLs einschränken!
if (-not (Test-Path $PassFile)) {
[System.IO.File]::WriteAllText($PassFile, $plain, [System.Text.Encoding]::ASCII)
if (Test-Path $PassFile) { $CreatedPaths += $PassFile }
}
# Aufräumen
$plain = $null
# Nur Pfade neu erstellter Dateien ausgeben
$CreatedPaths | ForEach-Object { Write-Host $_ }
Zertifikatsdateien über Bash für Linux erzeugen
Erstellen Sie in Bash ein Skript nach folgendem Beispiel und führen Sie es aus, um die Zertifikatsdateien zu erzeugen.
#!/usr/bin/env bash
set -euo pipefail
# --- Pfade ---
# >>> ANPASSEN: Basis-Verzeichnisse für AOAI-Assets und Passphrase-Datei.
AOAI_DIR="${HOME}/aeneis/aoai"
PASS_DIR="${HOME}/aeneis/pass"
# >>> ANPASSEN: Dateinamen (falls gewünscht)
KEY_ENC="${AOAI_DIR}/aoai-key.enc.pem"
CSR="${AOAI_DIR}/aoai-cert.csr"
CERT_PEM="${AOAI_DIR}/aoai-cert.pem"
CERT_CER="${AOAI_DIR}/aoai-cert.cer" # (optional) CER aus PEM
EXT_CNF="${AOAI_DIR}/ext.cnf"
PASS_FILE="${PASS_DIR}/aoai-key.pass"
declare -a CREATED
command -v openssl >/dev/null 2>&1 || { echo "OpenSSL nicht gefunden."; exit 1; }
mkdir -p "$AOAI_DIR" "$PASS_DIR"
# --- Passphrase abfragen ---
# >>> ANPASSEN: Mindestlänge/Policy nach Bedarf
read -r -s -p "Bitte Passphrase für aoai-key.enc.pem eingeben: " PLAIN
echo
[[ -z "${PLAIN// }" ]] && { echo "Keine Passphrase eingegeben."; exit 1; }
# 1) Encrypted Private Key (RSA-3072, AES-256-CBC)
if [[ ! -f "$KEY_ENC" ]]; then
# >>> ANPASSEN (optional): rsa_keygen_bits (z.B. 4096)
openssl genpkey -algorithm RSA -aes-256-cbc -pkeyopt rsa_keygen_bits:3072 \
-out "$KEY_ENC" -pass pass:"$PLAIN"
[[ -f "$KEY_ENC" ]] && CREATED+=("$KEY_ENC")
fi
# 2) CSR
if [[ ! -f "$CSR" ]]; then
# >>> ANPASSEN: DN (Firma/Standort/CN)
openssl req -new -key "$KEY_ENC" -out "$CSR" \
-subj "/C=DE/ST=Baden-Wuerttemberg/O=Intellior GmbH/CN=aeneis-aoai-client" \
-passin pass:"$PLAIN"
[[ -f "$CSR" ]] && CREATED+=("$CSR")
fi
# 3) Extensions-Datei
cat > "$EXT_CNF" <<'EOF'
[ext]
keyUsage = digitalSignature,keyEncipherment
extendedKeyUsage = clientAuth
EOF
[[ -f "$EXT_CNF" ]] && CREATED+=("$EXT_CNF")
# 4) Self-signed Zertifikat
if [[ ! -f "$CERT_PEM" ]]; then
# >>> ANPASSEN: Gültigkeitstage
openssl x509 -req -days 365 -in "$CSR" -signkey "$KEY_ENC" -out "$CERT_PEM" \
-extfile "$EXT_CNF" -extensions ext -passin pass:"$PLAIN"
[[ -f "$CERT_PEM" ]] && CREATED+=("$CERT_PEM")
fi
# 4a) CER aus PEM erzeugen – für Entra-Upload
if [[ -f "$CERT_PEM" && ! -f "$CERT_CER" ]]; then
openssl x509 -in "$CERT_PEM" -outform PEM -out "$CERT_CER"
[[ -f "$CERT_CER" ]] && CREATED+=("$CERT_CER")
# Alternative (DER-Format):
# openssl x509 -in "$CERT_PEM" -outform DER -out "$CERT_CER"
fi
# 5) Passphrase-Datei
# >>> HINWEIS: Enthält Klartext-Passphrase – Dateirechte einschränken!
if [[ ! -f "$PASS_FILE" ]]; then
umask 0077
printf "%s" "$PLAIN" > "$PASS_FILE"
[[ -f "$PASS_FILE" ]] && CREATED+=("$PASS_FILE")
fi
unset PLAIN
# Nur Pfade neu erstellter Dateien ausgeben
for p in "${CREATED[@]:-}"; do
echo "$p"
done
Öffentliches Zertifikat in Entra ID hochladen
Für die Anmeldung via ClientCertificateCredential müssen Sie das öffentliche Zertifikat in Entra ID in der App-Registrierung hochladen.
Anleitung:
-
Öffnen Sie in Microsoft Entra ID den Bereich Zertifikate & Geheimnisse der App-Registrierung, die Sie in Aeneis für den Azure-Open-AI-Service verwenden
-
Laden Sie im Tab Zertifikate über die Schaltfläche Zertifikat hochladen die PEM-Datei hoch, die Sie über Ihr SSL-Tool erzeugt haben
Rollenbasierte Zugriffssteuerung auf der Azure-OpenAI-Ressource einrichten
Weisen Sie auf der Azure OpenAI-Ressource unter Zugriffssteuerung (IAM) über Rollenzuweisung hinzufügen Rollen der App-Registrierung (Service Principal) zu:
-
Cognitive Services OpenAI User
-
Cognitive Services OpenAI Contributor
application.yml erweitern
Um Azure OpenAI Aeneis-seitig einzurichten, erweitern Sie die application.yml im Anwendungsverzeichnis wie im folgenden Beispiel.
Hinweis: Passen Sie die Einträge im Beispiel gemäß Ihrer Konfiguration entsprechend an.
Beispiel: application.yml
azure-openai:
tenant-id: 7307f031-e86b-4b14-8f88-81aa936df3d8 # >>> ANPASSEN
client-id: 8d225fb4-8ce9-4a26-b3f4-86cfd365805f # >>> ANPASSEN
endpoint: https://openai-instanz02-resource.services.ai.azure.com/ # >>> ANPASSEN
gpt-5-mini: gpt-5-mini
gpt-4o: gpt-4o
pem-cert-file: C:\Users\bob\aeneis\aoai\aoai-cert.pem # >>> ANPASSEN
pem-key-file: C:\Users\bob\aeneis\aoai\aoai-key.enc.pem # >>> ANPASSEN
pem-passphrase-file: C:\Users\bob\aeneis\aoai\pass\aoai-key.pass # >>> ANPASSEN
billing:
models:
gpt-5-mini: {inputPricePerMillionEur: 0.22, outputPricePerMillionEur: 1.74}
gpt-4o: {inputPricePerMillionEur: 2.18, outputPricePerMillionEur: 8.7}
Wichtige Hinweise:
- Die Pfade zu den Zertifikatsdaten müssen exakt sein.
- Das Aeneis-Dienstkonto benötigt Lesezugriff auf alle drei Zertifikatsdateien.
- Wenn Sie Linux verwenden, geben Sie Pfade mit / an (z. B. /opt/aeneis/aoai/aoai-cert.pem).
KI-Credit-Limit setzen
In Aeneis stehen KI-Credits für ein variables Kontingent an KI-Anfragen, das monatlich erneuert und zurückgesetzt wird. Wenn Sie Aeneis On-Premise nutzen, können Sie in den Einstellungen der ServerAdministration über die Eigenschaft KI-Credits eine monatliche Obergrenze für KI-Anfragen festlegen.
Den aktuellen Verbrauch der KI-Credits können Sie über Hilfe im Portal-Header einsehen.
Funktionstest durchführen
Wenn Sie die Einrichtung abgeschlossen haben, können Sie einen Funktionstest durchführen.
Anleitung:
-
Starten Sie Aeneis
-
Öffnen Sie im Portal den Chatbot und stellen Sie eine Frage
Troubleshooting
Falls eines der folgenden Symptome auftritt, können Sie wie folgt Abhilfe schaffen:
|
Symptom |
Ursache |
Abhilfe |
|---|---|---|
|
401 invalid_client |
Öffentliches Zertifikat nicht/anders hochgeladen |
aoai-cert.pem oder aoai-cert.cer in Entra erneut hochladen; Thumbprint/Ablauf prüfen |
|
403 Forbidden |
Rolle fehlt |
OpenAI User und OpenAI Contributor auf Ressource zuweisen |
|
404 Deployment not found |
Falscher Deployment-Name |
Namen unter Deployments prüfen und application.yml anpassen |
|
TLS/Key Fehler |
Falsches Format oder Passphrase |
PKCS#8 sicherstellen, Pfade prüfen, aoai-key.pass ohne Newline |
|
Kein Streaming |
Proxy/Firewall/Endpoint |
*.services.ai.azure.com freigeben; TLS-Inspection prüfen |
|
Lokal ok, als Dienst nicht |
Dateirechte |
Lesezugriff des Dienstkontos auf alle 3 Dateien setzen |
|
Portal akzeptiert nur .cer |
PEM wird abgelehnt |
.cer aus PEM erzeugen (siehe Schritt 3 „4a“) und hochladen |
